package com.kerrykidz.workflow.service;

import java.util.List;
import java.util.Map;

import org.activiti.engine.runtime.ProcessInstance;

import com.kerrykidz.system.vo.UserInfo;
import com.kerrykidz.workflow.vo.OptHisVo;
import com.kerrykidz.workflow.vo.TypeVo;
import com.kerrykidz.workflow.vo.WorkflowParamVo;
import com.kerrykidz.workflow.vo.WorkflowVo;
import com.rdp.framework.exception.RDPException;

/**
 * 工作流中流程以及流程实例相关Service
 * @author zhuss
 */
public interface IWorkflowService {
	
	
	/**
	 * 部署流程
	 * @param path
	 * @throws RDPException
	 */
	public void deploy(String key) throws RDPException;

	/**
	 * 启动流程
	 * @param key 比如请假是leave,价格是price,库存调整是stock,限时打折discount,采购订单order,付款pay
	 * @param businessKey 业务ID，比如请假的ID
	 * @param userId 登录用户Id
	 * @return String 流程实例Id
	 * @throws RDPException
	 * @date: 2014年9月5日
	 */
	public String startWorkflow(String key ,String businessKey,UserInfo user) throws RDPException; 
	
	/**
	 * 根据业务ID获取流程实例
	 * @param businessKey
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月9日
	 */
	//public ProcessInstance getProcessInstanceByBusinessKey(String businessKey)throws RDPException; 
	
    /**
     * 签收任务，分配任务
     * @param WorkflowParamVo
     * @throws RDPException
     */
	public void claimTask(WorkflowParamVo workflowparam)throws RDPException;
	
	/**
	 * 递交 和 
	 * @param workflowparam 工作流参数
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月10日
	 */
	public ProcessInstance complete(WorkflowParamVo workflowparam) throws RDPException;
	
	/**
	 * 查找指定用户的待办任务
	 * @param userId
	 * @param key
	 * @return
	 * @throws RDPException
	 */
	//public List<Task> findTodoTasks(String userId)throws RDPException;
	
	/**
	 * 查找用户已结束任务
	 * @param userId
	 * @param key
	 * @return
	 * @throws RDPException
	 */
	//public List<HistoricProcessInstance> findfinishedTasks(String key,String userId) throws RDPException;
	
	/**
	 * 查找流程的历史处理记录列表
	 * @param processInstanceId
	 * @return
	 * @throws Exception
	 */
	public List<OptHisVo> findOpinions(String processInstanceId,UserInfo user) throws RDPException;
	
	
	/**
	 * 结束关闭删除流程，保留历史记录
	 * @param processInstanceId
	 * @param reason ：act_hi_taskinst表中DEL_REASON
	 */
	public void deleteProcessInstance(WorkflowParamVo workflowparam)throws RDPException;
	
	/**
	 * 退回到起始节点,
	 * @param processInstanceId
	 * @throws RDPException
	 */
	public void backProcessToStart(WorkflowParamVo workflowparam)throws RDPException;
	
	/**
	 * 自由流转
	 * @param processInstanceId 
	 * @param userId
	 * @param activityId
	 * @param variables
	 * @throws RDPException
	 * @date: 2014年9月9日
	 */
	public void freeTransfer(String processInstanceId,String activityId,String userId,Map<String,Object> variables) throws RDPException;

	/**
	 * 获取流程实例的所有参数
	 * @param id
	 * @return
	 * @throws RDPException
	 */
	//public Map<String,Object> getHistoricVariableInstanceByPorcessId(String id) throws RDPException;
	
	/**
	 * 得到流程相关属性
	 * @param processInstanceId
	 * @param status
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月9日
	 */
	public WorkflowVo getWorkflowVo(String processInstanceId,String status,UserInfo user)throws RDPException;
	
	/**
	 * 获取所有的流程定义
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月29日
	 */
	public List<TypeVo> queryProcDef() throws RDPException;
	
	/**
	 * 每十分钟进行下载总部的流程数据
	 * @throws RDPException
	 * @date: 2014年10月9日
	 */
	public void executeDownload() throws RDPException;
	
}
